home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1994 / MacHack 1994.toast / MacHack™94 / Hacks / [√] Distribution Restricted! / Bill Hoffman / MenuMaze / MenuMaze.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-25  |  3.7 KB  |  153 lines  |  [TEXT/MMCC]

  1. /****************
  2.  *    MenuMaze.c
  3.  *
  4.  *        Copyright © 1994 Fresh Software and Instructional Design, All Rights Reserved.
  5.  *
  6.  *    6/23/94    wdh    created
  7.  ********************************************************************************/
  8.  
  9.  
  10. #define        FailNIL(h)        if ((h) == NULL)        goto error
  11. #define        FailOSErr(err)    if ((err) != noErr)        goto error
  12.  
  13. #define        abs(x)    ((x) < 0 ? -(x) : (x))
  14.  
  15. #define        kMenuBAR            128
  16. #define        kSplashDLOG            2048
  17.  
  18. void    main(void)
  19. {
  20.     short type; Handle h; Rect r;
  21.     EventRecord                event;
  22.     Handle                    mbar;
  23.     DialogPtr                dp;
  24.     long                    result;
  25.     long                    totalCount = 0;
  26.     Boolean        done;
  27.     MenuHandle                mh;
  28.     int                        i;
  29.     short                    realQuitItem, realQuitMenu;
  30.     short                    totalMenus;
  31.         
  32.     MaxApplZone();    /* grow the application heap to its maximum possible size */
  33.     MoreMasters();    /* Create 64 more master pointers        */
  34.     MoreMasters();    /* Create 64 more master pointers        */
  35.     MoreMasters();    /* Create 64 more master pointers        */
  36.     MoreMasters();    /* Create 64 more master pointers        */
  37.  
  38.     InitGraf(&qd.thePort);                 /* init Quickdraw and global variables */
  39.     InitFonts();                     /* initialize font manager     */
  40.     InitWindows();                     /* init window manager and setup WMgr GrafPort */
  41.     InitMenus();                    /* initialize menu Manager     */
  42.     TEInit();                        /* inititalize TextEdit         */
  43.     InitDialogs(0);                    /* initialize Dialog manager     */
  44.     FlushEvents(everyEvent, 0);        /* clear the Event queue of all events         */
  45.     InitCursor();                      /* set the cursor to arrow instead of clock    */
  46.     
  47.     mbar = GetNewMBar(kMenuBAR);
  48.     SetMenuBar(mbar);
  49.     DrawMenuBar();
  50.     {
  51.         MenuHandle        mh = GetMHandle(512);
  52.         AddResMenu(mh, 'DRVR');
  53.     }
  54.     for (i = 128; i < 140; i++)
  55.     {
  56.         mh = GetMenu(i);
  57.         if (mh == NULL)
  58.             break;
  59.         InsertMenu(mh, -1);
  60.     }
  61.     
  62.     /****************
  63.      *    Set real quit
  64.      ********************************************************************************/
  65.     totalMenus = (i > 5) ? 5 : i;
  66.     i = Random()%(totalMenus);
  67.     i = abs(i);
  68.     mh = GetMHandle(i+128);
  69.     realQuitMenu = i;
  70.     i = (Random()%7) + 1;
  71.     i = abs(i);
  72.     realQuitItem = i;
  73.     SetItem(mh, i, "\pQuit");
  74.     SetItemCmd(mh, i, noMark);
  75.     SetItemMark(mh, i, noMark);
  76.     
  77.     /****************
  78.      *    Set a coupla false quits
  79.      ********************************************************************************/
  80.     do {
  81.         i = Random()%(totalMenus);
  82.         i = abs(i);
  83.         mh = GetMHandle(i+128);
  84.     }    while (i == realQuitMenu);
  85.     do {
  86.         i = (Random()%7) + 1;
  87.         i = abs(i) + 1;
  88.     }    while (i == realQuitItem);
  89.     SetItem(mh, i, "\pQuit");
  90.     SetItemCmd(mh, i, noMark);
  91.     SetItemMark(mh, i, noMark);
  92.     DisableItem(mh, i);
  93.     
  94.     do {
  95.         i = Random()%(totalMenus);
  96.         i = abs(i);
  97.         mh = GetMHandle(i+128);
  98.     }    while (i == realQuitMenu);
  99.     do {
  100.         i = (Random()%7);
  101.         i = abs(i) + 1;
  102.     }    while (i == realQuitItem);
  103.     SetItem(mh, i, "\pQuit");
  104.     SetItemCmd(mh, i, noMark);
  105.     SetItemMark(mh, i, noMark);
  106.     DisableItem(mh, i);
  107.     
  108.     dp = GetNewDialog(kSplashDLOG, NULL, (WindowPtr)-1);
  109.     ShowWindow(dp);
  110.     
  111.     done = false;
  112.     do {
  113.         WindowPtr        wp;
  114.         WaitNextEvent(everyEvent, &event, 60, NULL);
  115.         switch (event.what)
  116.         {
  117.             case keyDown:
  118.                 done = true;
  119.                 break;
  120.             case updateEvt:
  121.                 BeginUpdate((WindowPtr)event.message);
  122.                 DrawDialog(dp);
  123.                 EndUpdate((WindowPtr)event.message);
  124.                 break;
  125.             case mouseDown:
  126.                 if ((i = FindWindow(event.where, &wp)) == inMenuBar)
  127.                 {
  128.                     Str63        itemName;
  129.                     result = MenuSelect(event.where);
  130.                     if (HiWord(result))
  131.                     {
  132.                         GetItem(GetMHandle(HiWord(result)), LoWord(result), itemName);
  133.                         done = !IUEqualString("\pQuit", itemName);
  134.                     }
  135.                     HiliteMenu(0);
  136.                 }
  137.                 else if (i == inContent)
  138.                 {
  139.                     GetDialogItem(dp, 3, &type, &h, &r);
  140.                     SetIText(h, "\pYou are in a maze of twisty passages, all alike...");
  141.                 }
  142.                 break;
  143.             case nullEvent:
  144.                 break;
  145.             default:
  146.                 break;
  147.         }
  148.     } while (!done);
  149. error:
  150.     return;
  151. }    /* main */
  152.  
  153.